// src/composables/useComponentState.js

import { ref, computed, onMounted, onUnmounted } from 'vue';
import { useRoute } from 'vue-router';

// 创建一个全局计数器，用于生成唯一ID
let instanceCounter = 0;

/**
 * 组件状态管理
 * 主要用于控制组件的布局、选择模式、返回按钮等状态
 *
 * 1. instanceId 组件的唯一标识
 * 2. nolayout 控制页面是否显示布局（顶部或者侧栏菜单等）
 * 3. selection 控制页面的选择模式，只要是设置就进入选择模式，就不显示操作按钮，具体选择模式分为：复选或者单选
 * 4. _parent 如果存在此参数，说明此页面是从父页面跳转过来的，是可以显示返回按钮的
 * @returns {Object} 包含状态和操作的属性和方法
 */
export function useComponentState() {
  // --- 1. 唯一标识 ---
  const instanceId = `layout-state-${instanceCounter++}`;
  // console.log(`Initializing state for instance: ${instanceId}`);

  // --- 2. 独立的、局部的响应式状态 ---
  // 每个调用 useComponentLayoutState 的组件实例都会有自己独立的 ref

  const isLayoutDisabled = ref(false);
  const isSelectionMode = ref(false);
  const isChildrenMode = ref(false);
  const isCheckboxMode = ref(false);

  // --- 3. 独立的逻辑 ---
  const route = useRoute();

  // 定义一个只属于当前实例的初始化函数
  const initStateFromRoute = () => {
    const query = route.query;
    if (query) {
      if (Object.hasOwn(query, 'nolayout') && query.nolayout === '1') {
        isLayoutDisabled.value = true;
      }
      if (Object.hasOwn(query, 'selection')) {
        isSelectionMode.value = true;
      }
      if (Object.hasOwn(query, '_parent')) {
        isChildrenMode.value = true;
      }
      if (Object.hasOwn(query, 'selection') && query.selection == '1') {
        isCheckboxMode.value = true;
      } else {
        isCheckboxMode.value = false;
      }
    }
  };

  // --- 4. 独立的生命周期钩子 ---
  onMounted(() => {
    initStateFromRoute();
    console.log(`Instance ${instanceId} mounted. State:`, {
      isLayoutDisabled: isLayoutDisabled.value,
      isSelectionMode: isSelectionMode.value,
      isChildrenMode: isChildrenMode.value,
      isCheckboxMode: isCheckboxMode.value,
    });
  });

  onUnmounted(() => {
    // 这里甚至不需要重置，因为整个实例的状态都会被垃圾回收
    console.log(`Instance ${instanceId} unmounted. Cleaning up.`);
  });

  // --- 5. 返回所有状态和方法 ---
  // 这些都只服务于调用它的那一个组件实例
  return {
    instanceId,
    isLayoutDisabled,
    isSelectionMode,
    isChildrenMode,
    isCheckboxMode,
  };
}
